﻿public static class GlobalMembersGame_value_tip
{

    ////* 初始化数值提示功能 

    //	//* 初始化数值提示功能 
    //	public static void GameValueTip_Init(ValueTipData_ p_data, LCUI_Widget_ container)
    //	{
    //		p_data.widget_container = container;
    //		Queue_Init(p_data.tip_data_list, typeof(ValueTipTaskData_), ValueTipTask_Destroy);
    //		p_data.timer_id = LCUITimer_Set(10, GameValueTip_Proc, p_data, DefineConstantsGame_value_tip.TRUE);
    //	}

    ////* 退出数值提示功能 

    //	//* 退出数值提示功能 
    //	public static void GameValueTip_Quit(ValueTipData_ p_data)
    //	{
    //		// 先关掉定时器
    //		LCUITimer_Free(p_data.timer_id);
    //		// 再释放占用的资源
    //		Queue_Destroy(p_data.tip_data_list);
    //	}

    ////* 添加一条数值提示 

    //	//* 添加一条数值提示 
    public static void GameValueTip_AddTip(ValueTipData_ p_data, int id, LCUI_Pos_ pos, int @value)
    {
        //ValueTipTaskData_ new_task_data = new ValueTipTaskData_();
        //ValueTipTaskData_ p_task_data;

        //p_task_data = GameValueTip_GetValidData(p_data, id);
        //if (p_task_data != null)
        //{
        //    p_task_data.id = id;
        //    //C++ TO C# CONVERTER WARNING: The following line was determined to be a copy assignment (rather than a reference assignment) - this should be verified and a 'CopyFrom' method should be created if it does not yet exist:
        //    //ORIGINAL LINE: p_task_data->start_pos = pos;
        //    p_task_data.start_pos.CopyFrom(pos);
        //    p_task_data.step_num = 0;
        //    // 与上次的值进行累加
        //    p_task_data.@value += @value;
        //    // 更新数据
        //    GameValueTipWidget_SetValue(p_task_data.wdg_tip, DefineConstantsGame_value_tip.FONT_COLOR_RED, p_task_data.value);
        //    Widget_Show(p_task_data.wdg_tip);
        //    return;
        //}

        //new_task_data.id = id;
        ////C++ TO C# CONVERTER WARNING: The following line was determined to be a copy assignment (rather than a reference assignment) - this should be verified and a 'CopyFrom' method should be created if it does not yet exist:
        ////ORIGINAL LINE: new_task_data.start_pos = pos;
        //new_task_data.start_pos.CopyFrom(pos);
        //new_task_data.step_num = 0;
        //new_task_data.@value = @value;
        //new_task_data.wdg_tip = Widget_New(null);

        //Widget_Container_Add(p_data.widget_container, new_task_data.wdg_tip);
        //Widget_SetAlpha(new_task_data.wdg_tip, 0);
        //Widget_SetZIndex(new_task_data.wdg_tip, 1000);
        //Widget_Show(new_task_data.wdg_tip);

        //GameValueTipWidget_SetValue(new_task_data.wdg_tip, DefineConstantsGame_value_tip.FONT_COLOR_RED, @value);

        //Queue_Lock(p_data.tip_data_list);
        //Queue_Add(p_data.tip_data_list, new_task_data);
        //Queue_Unlock(p_data.tip_data_list);
    }

    //	//#endif

    //	internal static void ValueTipTask_Destroy(IntPtr arg)
    //	{
    //		ValueTipTaskData_ p_task_data;
    //		p_task_data = (ValueTipTaskData_)arg;
    //		Widget_Destroy(p_task_data.wdg_tip);
    //	}

    //	//* 动态更新显示的数值 
    //	internal static void GameValueTip_Proc(IntPtr arg)
    //	{
    //		int i;
    //		int n;
    //		double tmp_val;
    //		ValueTipData_ p_data;
    ////C++ TO C# CONVERTER TODO TASK: Pointer arithmetic is detected on this variable, so pointers on this variable are left unchanged.
    //		ValueTipTaskData_ *p_task_data = new ValueTipTaskData_();
    //		LCUI_Pos_ pos = new LCUI_Pos_();
    //		LCUI_Size_ size = new LCUI_Size_();
    //		LCUI_Size_ new_size = new LCUI_Size_();
    //		byte alpha;

    //		p_data = (ValueTipData_)arg;
    //		Queue_Lock(p_data.tip_data_list);
    //		n = Queue_GetTotal(p_data.tip_data_list);
    //		for(i =0; i<n; ++i)
    //		{
    //			p_task_data = (ValueTipTaskData_) Queue_Get(p_data.tip_data_list, i);
    //			if (p_data == null)
    //			{
    //				continue;
    //			}
    //			if(p_task_data.step_num >= DefineConstantsGame_value_tip.LAST_STEP_NUM)
    //			{
    //				Widget_SetAlpha(p_task_data.wdg_tip, 0);
    //				Widget_Hide(p_task_data.wdg_tip);
    //				p_task_data.value = 0;
    //				continue;
    //			}
    //			++p_task_data.step_num;
    //			// 记录数值提示的显示位置 
    //			pos.x = p_task_data.start_pos.x;
    //			pos.y = p_task_data.start_pos.y;
    //			// 记录背景图的尺寸，作为部件的原始尺寸 
    //			size.w = p_task_data.wdg_tip.background.image.w;
    //			size.h = p_task_data.wdg_tip.background.image.h;
    //			// 前5次更新用于实现膨胀效果 
    //			if(p_task_data.step_num < 5)
    //			{
    //				// 尺寸随p_task_data->step_num的增长而增长 
    //				new_size.w = size.w + p_task_data.step_num*(size.w/2)/5;
    //				new_size.h = size.h + p_task_data.step_num*(size.h/2)/5;
    //				// 根据尺寸，调整位置，以使部件中心在p_task_data->start_pos处 
    //				pos.x -= new_size.w/2;
    //				pos.y -= new_size.h/2;
    //				Widget_Resize(p_task_data.wdg_tip, new_size);
    //			}
    //			// 后5次更新用于实现缩小效果 
    //			else if(p_task_data.step_num < 10)
    //			{
    //				// 尺寸随p_task_data->step_num的增长而缩小 
    //				new_size.w = size.w + (10-p_task_data.step_num)*(size.w/2)/5;
    //				new_size.h = size.h + (10-p_task_data.step_num)*(size.h/2)/5;
    //				pos.x -= new_size.w/2;
    //				pos.y -= new_size.h/2;
    //				Widget_Resize(p_task_data.wdg_tip, new_size);
    //			}
    //			// 当达到第10次更新时，还原部件应有的尺寸 
    //			else if(p_task_data.step_num == 10)
    //			{
    //				pos.x -= size.w/2;
    //				pos.y -= size.h/2;
    //				Widget_Resize(p_task_data.wdg_tip, size);
    //			}
    //			else
    //			{
    //				pos.x -= size.w/2;
    //				pos.y -= size.h/2;
    //			}
    //			// 当更新次数大于或等于MAX_REMAIN_COUNT时 
    //			if(p_task_data.step_num >= DefineConstantsGame_value_tip.MAX_REMAIN_COUNT)
    //			{
    //				tmp_val = 1.0 *p_task_data.step_num - DefineConstantsGame_value_tip.MAX_REMAIN_COUNT;
    //				tmp_val = tmp_val/(DefineConstantsGame_value_tip.LAST_STEP_NUM - DefineConstantsGame_value_tip.MAX_REMAIN_COUNT);
    //				// 按比例计算部件透明度，以及的Y轴坐标 
    //				alpha = (byte)(255 - tmp_val *255);
    //				pos.y -= (int)(DefineConstantsGame_value_tip.Y_DISTANCE *tmp_val);
    //			}
    //			else
    //			{
    //				alpha = 255;
    //			}

    //			Widget_Move(p_task_data.wdg_tip, pos);
    //			Widget_SetAlpha(p_task_data.wdg_tip, alpha);
    //		}
    //		Queue_Unlock(p_data.tip_data_list);
    //	}

    //	//* 设置显示的值 
    //	internal static void GameValueTipWidget_SetValue(LCUI_Widget_ widget, int color_type, int @value)
    //	{
    //		int i;
    //		int n;
    //		int w = 0;
    //		int x;
    //		string str = new string(new char[10]);
    //		string res_name = new string(new char[64]);
    //		LCUI_Graph_ bg = new LCUI_Graph_();
    //		LCUI_Graph_[] graph = new LCUI_Graph_[10];

    //		// 转换成字符串 
    //		str = string.Format("{0:D}", @value);
    //		// 获取位数 
    //		n = str.Length;
    //		for(i =n-1; i>=0; --i)
    //		{
    //			// 生成资源名称 
    //			if(color_type == DefineConstantsGame_value_tip.FONT_COLOR_RED)
    //			{
    //				res_name = string.Format("red-{0}", str[i]);
    //			}
    //			else
    //			{
    //				res_name = string.Format("green-{0}", str[i]);
    //			}
    //			Graph_Init(graph[i]);
    //			// 获取与该字符对应的字体图像 
    //			if(GameGraphRes_GetGraph(DefineConstantsGame_value_tip.FONT_RES, res_name, graph[i]) != 0)
    //			{
    //				continue;
    //			}
    //			// 累计图像宽度 
    //			w += graph[i].w;
    //		}
    //		x = 0;
    //		Graph_Init(bg);
    //		bg.color_type = (int)GraphColorTyle.COLOR_TYPE_RGBA;
    //		// 创建合适尺寸的图像 
    //		Graph_Create(bg, w, 24);
    //		for(i =0; i<n; ++i)
    //		{
    //			// 将获得到的字体图像覆盖至图像上 
    //			Graph_Replace(bg, graph[i], Pos(x,0));
    //			x += graph[i].w;
    //		}
    //		// 如果有背景图，那就释放它，因为这个部件的背景图只有本函数在设置 
    //		if(Graph_IsValid(widget.background.image))
    //		{
    //			Graph_Free(widget.background.image);
    //		}
    //		// 设置背景 
    //		Widget_SetBackgroundImage(widget, bg);
    //		Widget_SetBackgroundTransparent(widget, DefineConstantsGame_value_tip.TRUE);
    //		// 设置背景布局类型为拉伸，背景图随部件的尺寸变化而变化 
    //		Widget_SetBackgroundLayout(widget, LAYOUT_STRETCH);
    //		// 调整尺寸 
    //		Widget_Resize(widget, Graph_GetSize(bg));
    //	}

    //	//* 获取可用的数据 
    //	internal static ValueTipTaskData_ GameValueTip_GetValidData(ValueTipData_ p_data, int id)
    //	{
    //		int i;
    //		int n;
    //		ValueTipTaskData_ p_task_data;

    //		Queue_Lock(p_data.tip_data_list);
    //		n = Queue_GetTotal(p_data.tip_data_list);
    //		for(i =0; i<n; ++i)
    //		{
    //			p_task_data = (ValueTipTaskData_) Queue_Get(p_data.tip_data_list, i);
    //			if (p_task_data == null)
    //			{
    //				continue;
    //			}
    //			if((p_task_data.id == id && p_task_data.step_num < DefineConstantsGame_value_tip.MAX_REMAIN_COUNT) || p_task_data.step_num >= DefineConstantsGame_value_tip.LAST_STEP_NUM)
    //			{
    //				Queue_Unlock(p_data.tip_data_list);
    //				return p_task_data;
    //			}
    //		}
    //		Queue_Unlock(p_data.tip_data_list);
    //		return null;
    //	}
}
// ****************************************************************************
// * Punch And Kick -- a simple 2D Fighting Game.
// *
// * Copyright (C) 2013 by
// * Liu Chao
// *
// * This file is part of the Punch And Kick project, and may only be used,
// * modified, and distributed under the terms of the GPLv2.
// *
// * (GPLv2 is abbreviation of GNU General Public License Version 2)
// *
// * By continuing to use, modify, or distribute this file you indicate that you
// * have read the license and understand and accept it fully.
// *
// * The Punch And Kick project is distributed in the hope that it will be
// * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GPL v2 for
// * more details.
// *
// * You should have received a copy of the GPLv2 along with this file. It is
// * usually in the LICENSE.TXT file, If not, see <http://www.gnu.org/licenses/>.
// * **************************************************************************

// ****************************************************************************
// * Punch And Kick -- 一个普通的2D格斗游戏
// *
// * 版权所有 (C) 2013 归属于
// * 刘超
// *
// * 这个文件是 Punch And Kick 项目的一部分，并且只可以根据GPLv2许可协议来使用、
// * 更改和发布。
// *
// * (GPLv2 是 GNU通用公共许可证第二版 的英文缩写)
// *
// * 继续使用、修改或发布本文件，表明您已经阅读并完全理解和接受这个许可协议。
// *
// * Punch And Kick 项目是基于技术交流目的而加以散布的，但不负任何担保责任，例
// * 如：稳定性、可玩性、趣味性等的担保，甚至没有适销性或特定用途的隐含担保，详
// * 情请参照GPLv2许可协议。
// *
// * 您应已收到附随于本文件的GPLv2许可协议的副本，它通常在LICENSE.TXT文件中，如果
// * 没有，请查看：<http://www.gnu.org/licenses/>.
// * **************************************************************************

// 数值提示，例如：攻击产生的伤害值


// ****************************************************************************
// * Punch And Kick -- a simple 2D Fighting Game.
// *
// * Copyright (C) 2013 by
// * Liu Chao
// *
// * This file is part of the Punch And Kick project, and may only be used,
// * modified, and distributed under the terms of the GPLv2.
// *
// * (GPLv2 is abbreviation of GNU General Public License Version 2)
// *
// * By continuing to use, modify, or distribute this file you indicate that you
// * have read the license and understand and accept it fully.
// *
// * The Punch And Kick project is distributed in the hope that it will be
// * useful, but WITHOUT ANY WARRANTY; without even the implied warranty of 
// * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GPL v2 for
// * more details.
// *
// * You should have received a copy of the GPLv2 along with this file. It is
// * usually in the LICENSE.TXT file, If not, see <http://www.gnu.org/licenses/>.
// * **************************************************************************

// ****************************************************************************
// * Punch And Kick -- 一个普通的2D格斗游戏
// *
// * 版权所有 (C) 2013 归属于
// * 刘超
// *
// * 这个文件是 Punch And Kick 项目的一部分，并且只可以根据GPLv2许可协议来使用、
// * 更改和发布。
// *
// * (GPLv2 是 GNU通用公共许可证第二版 的英文缩写)
// *
// * 继续使用、修改或发布本文件，表明您已经阅读并完全理解和接受这个许可协议。
// *
// * Punch And Kick 项目是基于技术交流目的而加以散布的，但不负任何担保责任，例
// * 如：稳定性、可玩性、趣味性等的担保，甚至没有适销性或特定用途的隐含担保，详
// * 情请参照GPLv2许可协议。
// *
// * 您应已收到附随于本文件的GPLv2许可协议的副本，它通常在LICENSE.TXT文件中，如果
// * 没有，请查看：<http://www.gnu.org/licenses/>.
// * **************************************************************************


public class ValueTipData_
{
	public LCUI_BOOL is_inited = new LCUI_BOOL();
	public int timer_id;
	public LCUI_Widget_ widget_container;
	public LCUI_Queue tip_data_list = new LCUI_Queue();
}

public class ValueTipTaskData_
{
	public int id;
	public int @value;
	public int step_num;
	public LCUI_Pos_ start_pos = new LCUI_Pos_();
	public LCUI_Widget_ wdg_tip;
}
